package com.farmer.training.service;

import com.farmer.common.entity.TrainingCourse;
import com.farmer.common.result.Result;

/**
 * 培训课程服务接口
 */
public interface TrainingService {

    /**
     * 获取培训课程列表（分页）
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param category 课程分类
     * @param courseType 课程类型
     * @param status 课程状态
     * @param keyword 搜索关键词
     * @return 课程列表
     */
    Result<?> getCourseList(Integer pageNum, Integer pageSize, String category, String courseType, String status, String keyword);

    /**
     * 根据ID获取课程详情
     * @param courseId 课程ID
     * @return 课程详情
     */
    Result<?> getCourseById(Long courseId);

    /**
     * 添加培训课程
     * @param course 课程信息
     * @return 添加结果
     */
    Result<?> addCourse(TrainingCourse course);

    /**
     * 更新课程信息
     * @param course 课程信息
     * @return 更新结果
     */
    Result<?> updateCourse(TrainingCourse course);

    /**
     * 删除课程
     * @param courseId 课程ID
     * @return 删除结果
     */
    Result<?> deleteCourse(Long courseId);

    /**
     * 更新课程状态
     * @param courseId 课程ID
     * @param status 新状态
     * @return 更新结果
     */
    Result<?> updateCourseStatus(Long courseId, String status);

    /**
     * 获取推荐课程列表
     * @param limit 数量限制
     * @return 推荐课程列表
     */
    Result<?> getRecommendedCourses(Integer limit);

    /**
     * 获取课程分类列表
     * @return 分类列表
     */
    Result<?> getCategoryList();

    /**
     * 获取讲师的课程列表
     * @param instructorId 讲师ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 讲师课程列表
     */
    Result<?> getCoursesByInstructor(Long instructorId, Integer pageNum, Integer pageSize);

    /**
     * 增加报名人数
     * @param courseId 课程ID
     * @return 更新结果
     */
    Result<?> increaseEnrollmentCount(Long courseId);

    /**
     * 减少报名人数
     * @param courseId 课程ID
     * @return 更新结果
     */
    Result<?> decreaseEnrollmentCount(Long courseId);

    /**
     * 获取课程统计信息
     * @return 统计信息
     */
    Result<?> getCourseStatistics();
} 